package com.android.JiYclock.shareAlarm;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import com.android.JiYclock.Log;

import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.Contacts;
import android.view.View;

public class smsUtility {
	
    private final static Uri CONTENT_URI = Uri.parse("content://mms/inbox"); //查询彩信收件箱
    private final static Uri CONTENT_URI_PART = Uri.parse("content://mms/part"); //彩信附件表
	private static String Desc = "date DESC";
	private static Uri uri = null;
	private static String body  = null;
	private static String address = null;
	
	/**
	 * 判断彩信数据库中时间最近的一条彩信记录是否为主题是JiYclock的彩信
	 * @param context
	 * @return
	 */
	public static Boolean IsJiYclock(Context context){
		Cursor cursor =context.getContentResolver().query(CONTENT_URI, null, null,null, Desc);
		if(cursor!=null)
		{
			if(cursor.moveToFirst()){
				String subject = cursor.getString(cursor.getColumnIndex("sub"));//彩信主题
				if(subject.equals("JiYclock"))
				{
					return true;
				}
				else
				{
					return false;
				}
			}
			return false;
		}
		return false;
	}
	
    public static String getAlarmTime(Context context)

    {
    	Cursor cursor =context.getContentResolver().query(CONTENT_URI, null, null,null, Desc);
		if(cursor!=null)
			
		{
			if(cursor.moveToFirst())
			{
				int id = cursor.getInt(cursor.getColumnIndex("_id"));//彩信Id
				
		        String subject = cursor.getString(cursor.getColumnIndex("sub"));//彩信主题
		        
		        Cursor cAdd =null;
		        Cursor cPhones=null;
		        Cursor cPeople=null;
		        Cursor cPart=null;
		    try {
		        //根据彩信id从addr表中查出发送人电话号码，其中外键msg_id映射pdu表的id；
		        String selectionAdd = new String("msg_id=" + id );
		        Uri uriAddr = Uri.parse("content://mms/" + id + "/addr");
		        cAdd =context.getContentResolver().query(uriAddr, null, selectionAdd, null, null);
		        //根据addr表中的电话号码在phones表中查出PERSON_ID,外键PERSON_ID映射people表中的_id
		        if(cAdd.moveToFirst()){//该处会得到2条记录，第一条记录为发件人号码，第二条为本机号码
		            String number= cAdd.getString(cAdd.getColumnIndex("address"));
		            cPhones = context.getContentResolver().query(Contacts.Phones.CONTENT_URI, new String[]{Contacts.Phones.PERSON_ID},Contacts.Phones.NUMBER +"=?",new String[]{number}, null);
		            if(cPhones.getCount()>0){//根据phones表中的PERSON_ID查出 people 表中联系人的名字
		                while (cPhones.moveToNext()) {
		                    String pId = cPhones.getString(cPhones.getColumnIndex(Contacts.Phones.PERSON_ID));
		                    Uri uriPeo = Uri.parse(Contacts.People.CONTENT_URI+"/"+pId);
		                    cPeople = context.getContentResolver().query(uriPeo, null,null,null, null);
		                    if(cPeople.getCount()>0){
		                        String str="";
		                        while (cPeople.moveToNext()) {
		                            if(str == ""){
		                                str = cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
		                            }else{
		                                str += ","+cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
		                            }
		                        }
		                   //     name=number+"/"+str;//如果通讯录中存在，则以 ‘电话号码/名字’ 形式显示
		                    }else{
		                   //     name=number;//如果是陌生人直接显示电话号码
		                    }
		                }
		            }else{
		               // name=number;//如果是陌生人直接显示电话号码
		            }    
		        }
		        //根据彩信ID查询彩信的附件
		        String selectionPart = new String("mid="+id);//part表中的mid外键为pdu表中的_id
		        cPart = context.getContentResolver().query(CONTENT_URI_PART, null,selectionPart,null, null);            
		        String bodyStr="";
		        String[] coloumns = null; 
		        String[] values = null; 
		        while(cPart.moveToNext()){ 
		            coloumns = cPart.getColumnNames(); 
		            if(values == null) 
		                values = new String[coloumns.length]; 
		            for(int i=0; i< cPart.getColumnCount(); i++){ 
		                values[i] = cPart.getString(i); 
		            } 
		            if(values[3].equals("image/jpeg") || values[3].equals("image/bmp")){  //判断附件类型
//		                image.setImageBitmap(getMmsImage(values[0]));//该处只会显示一张图片，如果有需求的朋友可以根据自己的需求将ImageView换成Gallery，修改一下方法
//		                image.setVisibility(View.VISIBLE);
		            }else if(values[3].equals("audio/3gpp"))
		            {
		            	
		            	uri = Uri.parse("content://mms/part/" + values[0] ); 
		            	
		            	
		            	//暂时不对音频文件进行处理，只提取出这个Uri
		            	
		            }else if(values[3].equals("text/plain")){
		                /**该处详细描述一下
		                *发现一个版本问题，之前用的2.1版本的多台手机测试通过，结果用1.6的G2报异常
		                *经过调试发现，1.6版本part表中根本就没有"text"列，也就是values[13],所以就
		                *报错了，好像在1.6版本（我只测过G2，嘿嘿），就算是文本信息也是以一个附件形
		                *式存在_date里面也就是values[12]里面，与图片类似，但在2.1里面却不是这样存
		                *的，文本信息被存在了"text"这个字段中，且"_date"为null*/
		                if(values[12]!=null){//所以该处需判断一下，如果_date为null，可直接设置内容为"text"
		                    bodyStr=getMmsText(context,values[0]);
		                }else{
		                    bodyStr = values[13];
		                }
		            }
		        }
		        if(!"".equals(subject) && subject != null){
//		            try {
//		               sub.setText(new String(subject.getBytes("iso-8859-1"),"UTF-8"));//设置彩信主题的编码格式
//		            } catch (UnsupportedEncodingException e) {
//		                e.printStackTrace();
//		            }
		        }
		        if(!"".equals(bodyStr)){
		            body= bodyStr;
		        }
		      //  address.setText(name); 
		    //date.setText(format.format(time));
		    } catch (RuntimeException e) {
		    }finally{
		        if(cAdd != null){
		            cAdd.close();
		        }
		        if(cPart != null){
		            cPart.close();
		        }
		        if(cPeople != null){
		            cPeople.close();
		        }
		        if(cPhones != null){
		            cPhones.close();
		        }
		    }
			}
		}
		return body;
    	
    }
    
	public static Uri getAlarmUri(Context context)
	{
		Cursor cursor =context.getContentResolver().query(CONTENT_URI, null, null,null, Desc);
		if(cursor!=null)
		{
			if(cursor.moveToFirst())
			{
				int id = cursor.getInt(cursor.getColumnIndex("_id"));//彩信Id
				
		        String subject = cursor.getString(cursor.getColumnIndex("sub"));//彩信主题
		        
		        Cursor cAdd =null;
		        Cursor cPhones=null;
		        Cursor cPeople=null;
		        Cursor cPart=null;
		    try {
		        //根据彩信id从addr表中查出发送人电话号码，其中外键msg_id映射pdu表的id；
		        String selectionAdd = new String("msg_id=" + id );
		        Uri uriAddr = Uri.parse("content://mms/" + id + "/addr");
		        cAdd =context.getContentResolver().query(uriAddr, null, selectionAdd, null, null);
		        //根据addr表中的电话号码在phones表中查出PERSON_ID,外键PERSON_ID映射people表中的_id
		        if(cAdd.moveToFirst()){//该处会得到2条记录，第一条记录为发件人号码，第二条为本机号码
		            String number= cAdd.getString(cAdd.getColumnIndex("address"));
		            cPhones = context.getContentResolver().query(Contacts.Phones.CONTENT_URI, new String[]{Contacts.Phones.PERSON_ID},Contacts.Phones.NUMBER +"=?",new String[]{number}, null);
		            if(cPhones.getCount()>0){//根据phones表中的PERSON_ID查出 people 表中联系人的名字
		                while (cPhones.moveToNext()) {
		                    String pId = cPhones.getString(cPhones.getColumnIndex(Contacts.Phones.PERSON_ID));
		                    Uri uriPeo = Uri.parse(Contacts.People.CONTENT_URI+"/"+pId);
		                    cPeople = context.getContentResolver().query(uriPeo, null,null,null, null);
		                    if(cPeople.getCount()>0){
		                        String str="";
		                        while (cPeople.moveToNext()) {
		                            if(str == ""){
		                                str = cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
		                            }else{
		                                str += ","+cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
		                            }
		                        }
		                   //     name=number+"/"+str;//如果通讯录中存在，则以 ‘电话号码/名字’ 形式显示
		                    }else{
		                   //     name=number;//如果是陌生人直接显示电话号码
		                    }
		                }
		            }else{
		               // name=number;//如果是陌生人直接显示电话号码
		            }    
		        }
		        //根据彩信ID查询彩信的附件
		        String selectionPart = new String("mid="+id);//part表中的mid外键为pdu表中的_id
		        cPart = context.getContentResolver().query(CONTENT_URI_PART, null,selectionPart,null, null);            
		        String bodyStr="";
		        String[] coloumns = null; 
		        String[] values = null; 
		        while(cPart.moveToNext()){ 
		            coloumns = cPart.getColumnNames(); 
		            if(values == null) 
		                values = new String[coloumns.length]; 
		            for(int i=0; i< cPart.getColumnCount(); i++){ 
		                values[i] = cPart.getString(i); 
		            } 
		            if(values[3].equals("image/jpeg") || values[3].equals("image/bmp")){  //判断附件类型
//		                image.setImageBitmap(getMmsImage(values[0]));//该处只会显示一张图片，如果有需求的朋友可以根据自己的需求将ImageView换成Gallery，修改一下方法
//		                image.setVisibility(View.VISIBLE);
		            }else if(values[3].equals("audio/3gpp"))
		            {
		            	
		            	uri = Uri.parse("content://mms/part/" + values[0] ); 
		            	
		            	
		            	//暂时不对音频文件进行处理，只提取出这个Uri
		            	
		            }else if(values[3].equals("text/plain")){
		                /**该处详细描述一下
		                *发现一个版本问题，之前用的2.1版本的多台手机测试通过，结果用1.6的G2报异常
		                *经过调试发现，1.6版本part表中根本就没有"text"列，也就是values[13],所以就
		                *报错了，好像在1.6版本（我只测过G2，嘿嘿），就算是文本信息也是以一个附件形
		                *式存在_date里面也就是values[12]里面，与图片类似，但在2.1里面却不是这样存
		                *的，文本信息被存在了"text"这个字段中，且"_date"为null*/
		                if(values[12]!=null){//所以该处需判断一下，如果_date为null，可直接设置内容为"text"
		                    bodyStr=getMmsText(context,values[0]);
		                }else{
		                    bodyStr = values[13];
		                }
		            }
		        }
		        if(!"".equals(subject) && subject != null){
//		            try {
//		               sub.setText(new String(subject.getBytes("iso-8859-1"),"UTF-8"));//设置彩信主题的编码格式
//		            } catch (UnsupportedEncodingException e) {
//		                e.printStackTrace();
//		            }
		        }
		        if(!"".equals(bodyStr)){
		            body= bodyStr;
		        }
		      //  address.setText(name); 
		    //date.setText(format.format(time));
		    } catch (RuntimeException e) {
		    }finally{
		        if(cAdd != null){
		            cAdd.close();
		        }
		        if(cPart != null){
		            cPart.close();
		        }
		        if(cPeople != null){
		            cPeople.close();
		        }
		        if(cPhones != null){
		            cPhones.close();
		        }
		    }
			}
		}
		return uri;
		
	}

	 private static String getMmsText(Context context,String _id){ //读取文本附件
	        
		 Uri partURI = Uri.parse("content://mms/part/" + _id ); 
	        InputStream is = null; 
	        StringBuilder sb = new StringBuilder();
	        try { 
	            is = context.getContentResolver().openInputStream(partURI); 
	            if(is!=null){
	                BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
	                String temp = reader.readLine();
	                while (temp != null) {
	                    sb.append(temp);
	                    temp=reader.readLine();//在网上看到很多把InputStream转成string的文章，没有这关键的一句，几乎千遍一律的复制粘贴，该处如果不加上这句的话是会内存溢出的
	                }
	            }
	        }catch (IOException e) { 
	            e.printStackTrace();  
	            Log.v( "读取附件异常"+e.getMessage());
	        }finally{ 
	            if (is != null){ 
	                try { 
	                    is.close(); 
	                }catch (IOException e){
	                    Log.v("读取附件异常"+e.getMessage());
	                }
	            } 
	        }
	        return sb.toString();
	    }
	
	static String getAddress(Context context)
	{
		Cursor cursor =context.getContentResolver().query(CONTENT_URI, null, null,null, Desc);
		if(cursor!=null)
			
		{
			if(cursor.moveToFirst())
			{
				int id = cursor.getInt(cursor.getColumnIndex("_id"));//彩信Id
				
		        String subject = cursor.getString(cursor.getColumnIndex("sub"));//彩信主题
		        
		        Cursor cAdd =null;
		        Cursor cPhones=null;
		        Cursor cPeople=null;
		        Cursor cPart=null;
		    try {
		        //根据彩信id从addr表中查出发送人电话号码，其中外键msg_id映射pdu表的id；
		        String selectionAdd = new String("msg_id=" + id );
		        Uri uriAddr = Uri.parse("content://mms/" + id + "/addr");
		        cAdd =context.getContentResolver().query(uriAddr, null, selectionAdd, null, null);
		        //根据addr表中的电话号码在phones表中查出PERSON_ID,外键PERSON_ID映射people表中的_id
		        if(cAdd.moveToFirst()){//该处会得到2条记录，第一条记录为发件人号码，第二条为本机号码
		            address = cAdd.getString(cAdd.getColumnIndex("address"));
		            cPhones = context.getContentResolver().query(Contacts.Phones.CONTENT_URI, new String[]{Contacts.Phones.PERSON_ID},Contacts.Phones.NUMBER +"=?",new String[]{address}, null);
		            if(cPhones.getCount()>0){//根据phones表中的PERSON_ID查出 people 表中联系人的名字
		                while (cPhones.moveToNext()) {
		                    String pId = cPhones.getString(cPhones.getColumnIndex(Contacts.Phones.PERSON_ID));
		                    Uri uriPeo = Uri.parse(Contacts.People.CONTENT_URI+"/"+pId);
		                    cPeople = context.getContentResolver().query(uriPeo, null,null,null, null);
		                    if(cPeople.getCount()>0){
		                        String str="";
		                        while (cPeople.moveToNext()) {
		                            if(str == ""){
		                                str = cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
		                            }else{
		                                str += ","+cPeople.getString(cPeople.getColumnIndex(Contacts.People.DISPLAY_NAME));
		                            }
		                        }
		                   //     name=number+"/"+str;//如果通讯录中存在，则以 ‘电话号码/名字’ 形式显示
		                    }else{
		                   //     name=number;//如果是陌生人直接显示电话号码
		                    }
		                }
		            }else{
		               // name=number;//如果是陌生人直接显示电话号码
		            }    
		        }
		        //根据彩信ID查询彩信的附件
		        String selectionPart = new String("mid="+id);//part表中的mid外键为pdu表中的_id
		        cPart = context.getContentResolver().query(CONTENT_URI_PART, null,selectionPart,null, null);            
		        String bodyStr="";
		        String[] coloumns = null; 
		        String[] values = null; 
		        while(cPart.moveToNext()){ 
		            coloumns = cPart.getColumnNames(); 
		            if(values == null) 
		                values = new String[coloumns.length]; 
		            for(int i=0; i< cPart.getColumnCount(); i++){ 
		                values[i] = cPart.getString(i); 
		            } 
		            if(values[3].equals("image/jpeg") || values[3].equals("image/bmp")){  //判断附件类型
//		                image.setImageBitmap(getMmsImage(values[0]));//该处只会显示一张图片，如果有需求的朋友可以根据自己的需求将ImageView换成Gallery，修改一下方法
//		                image.setVisibility(View.VISIBLE);
		            }else if(values[3].equals("audio/3gpp"))
		            {
		            	
		            	uri = Uri.parse("content://mms/part/" + values[0] ); 
		            	
		            	
		            	//暂时不对音频文件进行处理，只提取出这个Uri
		            	
		            }else if(values[3].equals("text/plain")){
		                /**该处详细描述一下
		                *发现一个版本问题，之前用的2.1版本的多台手机测试通过，结果用1.6的G2报异常
		                *经过调试发现，1.6版本part表中根本就没有"text"列，也就是values[13],所以就
		                *报错了，好像在1.6版本（我只测过G2，嘿嘿），就算是文本信息也是以一个附件形
		                *式存在_date里面也就是values[12]里面，与图片类似，但在2.1里面却不是这样存
		                *的，文本信息被存在了"text"这个字段中，且"_date"为null*/
		                if(values[12]!=null){//所以该处需判断一下，如果_date为null，可直接设置内容为"text"
		                    bodyStr=getMmsText(context,values[0]);
		                }else{
		                    bodyStr = values[13];
		                }
		            }
		        }
		        if(!"".equals(subject) && subject != null){
//		            try {
//		               sub.setText(new String(subject.getBytes("iso-8859-1"),"UTF-8"));//设置彩信主题的编码格式
//		            } catch (UnsupportedEncodingException e) {
//		                e.printStackTrace();
//		            }
		        }
		        if(!"".equals(bodyStr)){
		            body= bodyStr;
		        }
		      //  address.setText(name); 
		    //date.setText(format.format(time));
		    } catch (RuntimeException e) {
		    }finally{
		        if(cAdd != null){
		            cAdd.close();
		        }
		        if(cPart != null){
		            cPart.close();
		        }
		        if(cPeople != null){
		            cPeople.close();
		        }
		        if(cPhones != null){
		            cPhones.close();
		        }
		    }
			}
		}
		return address;
	}
	
	
	
	
	
}

